/**
 * @file
 * @author  Tsin Smith <tsin.creator@gmail.com>
 *
 * @section DESCRIPTION
 *
 */

#ifndef __TSIN_LIBRARY_BULLETEVENT_HPP__
#define __TSIN_LIBRARY_BULLETEVENT_HPP__

#include <tsin/library/DynamicObject.hpp>

namespace tsin {

        class BulletRuntime;

        class LIBRARY_DLLEXPORT BulletEvent : public DynamicObject {
        public:
                BulletEvent(bool d = false);
                virtual DynamicEvent postTick(void *data = 0, void *priv_data = 0);

                virtual char getDescriptor();

                void setNext(BulletEvent **list, int idx);
                BulletEvent *next();

                virtual bool trigger(BulletRuntime &bullet, void *data = 0) = 0;
                virtual BulletEvent *handle(BulletRuntime &bullet, void *data = 0) = 0;

        private:
                BulletEvent **list;
                int idx;
        };

}

#endif /* __TSIN_LIBRARY_BULLETEVENT_HPP__ */
